/*
 * EstrategiaSeleccionar.java
 * 
 * Copyright (C) 2008 David Castellanos Serrano
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package dpoo.control.comportamiento;

import dpoo.control.Control;
import dpoo.figuras.estadoclase.EstadoClaseHover;
import dpoo.figuras.estadoclase.EstadoClaseNormal;
import dpoo.figuras.estadoclase.EstadoClaseSeleccionada;
import dpoo.figuras.FiguraClase;

import java.awt.event.MouseEvent;

public class EstrategiaSeleccionar implements Estrategia {

    Control uniqueInstance = Control.instance();
    FiguraClase claseSeleccionada = null;
    
    public void claseMouseClicked(FiguraClase clase) {
        //había una clase seleccionada anteriormente
        if(claseSeleccionada != null) {
            //devuelvo la clase seleccionada a la normalidad
            this.claseSeleccionada.setEstado(new EstadoClaseNormal());
            this.claseSeleccionada.repaint();
            
            //actualizo la UI para que no muestre info de ninguna clase
            this.uniqueInstance.mostrarInfoFiguraClase(null);
            
            //olvido la clase que tenía seleccionada
            this.claseSeleccionada = null;
        }
        
        //seteo el estado de la clase para que se refleje la selección
        clase.setEstado(new EstadoClaseSeleccionada());
        clase.repaint();
        
        //me guardo la clase que se ha seleccionado
        this.claseSeleccionada = clase;
        
        //muestro la información de la clase en la interfaz gráfica
        this.uniqueInstance.mostrarInfoFiguraClase(clase);
    }

    public void claseMouseEntered(FiguraClase clase) {
        if(!(clase.getEstado() instanceof EstadoClaseSeleccionada)) {
            clase.setEstado(new EstadoClaseHover());
            clase.repaint();
        }
    }

    public void claseMouseExited(FiguraClase clase) {
        if(clase.getEstado() instanceof EstadoClaseHover) {
            clase.setEstado(new EstadoClaseNormal());
            clase.repaint();
        }
    }
    
    public void ventanaPrincipalMouseClicked(MouseEvent evt) {
        //¿hay alguna clase seleccionada?
        if(this.claseSeleccionada != null) {
            //devuelvo la clase seleccionada a la normalidad
            this.claseSeleccionada.setEstado(new EstadoClaseNormal());
            this.claseSeleccionada.repaint();
            
            //actualizo la UI para que no muestre info de ninguna clase
            this.uniqueInstance.mostrarInfoFiguraClase(null);
            
            //olvido la clase que tenía seleccionada
            this.claseSeleccionada = null;
        }
    }

    public void ventanaPrincipalMouseDragged(MouseEvent evt) {}
}

